﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PolyalphabeticSubstitutionCiphers.Modles
{
    internal class Code
    {

        /// 明文    
        public string Plaintext;

        /// 密钥
        public string Key;

        ///暗文
         public List<char> Ciphertext = new List<char>();

        /// 将明文转化为暗文
        public void ConvertToCiphertext()
        {        
            //当前转化数量
            int sum = 0;
            while (sum != Plaintext.Length)
            {
                //以密钥的长度为一个单位对明文进行转换
                for (int i = 0; i < Key.Length; i++)
                {
                    //防止内部循环导致sum大于等于明文长度
                    if (sum != Plaintext.Length)
                    {
                        ///加密后的位置
                        Ciphertext.Add(ConTChar((ConTNum(Plaintext[sum]) + ConTNum(Key[i])) % 26));
                        sum++;
                    }
                    else
                        break;

                }

            }           



        }

        /// 输出在字母表中的位置
        private int ConTNum(char character)
        {
            int num = character - 'a';
            return num;
        }

        ///将字母表中的位置转化成字符
        private char ConTChar(int num)
        {
            //以大写输出
            char character = Convert.ToChar(65 + num);
            return character;
        }

        ///输出暗文
        public void Output()
        {
            for (int i = 0; i < Plaintext.Length; i++)
            {
                //每单位长度输入一个空格分离
                if (i != 0 && i % Key.Length == 0)
                    Console.Write(' ');
                Console.Write(Ciphertext[i]);
            }
        }

    }
}
